#ifndef _SSS_INTER_H_
#define _SSS_INTER_H_

#include "../../Main/include/SSS_main.cuh"
#include "../../Main/include/SSS_utils.cuh"
#include "../../Main/include/SSS_matvec.h"

#include <omp.h>
// #include "SSS_SETUP.h" 

#if defined (__cplusplus)
extern "C"
{
#endif    

void SSS_amg_interp_trunc(SSS_MAT *P, SSS_AMG_PARS *pars);

static void interp_STD(SSS_MAT * A, SSS_IVEC * vertices, SSS_MAT * P, SSS_IMAT * S, SSS_AMG_PARS * pars);

void SSS_amg_interp(SSS_MAT *A, SSS_IVEC *vertices, SSS_MAT *P, SSS_IMAT *S, SSS_AMG_PARS *pars);

void interp_DIR(SSS_MAT * A, SSS_IVEC * vertices, SSS_MAT * P, SSS_AMG_PARS * pars);

SSS_MAT SSS_amg_fit_candidates(SSS_VEC * aggregates,double *B,SSS_AMG_PARS *pars);

SSS_MAT SSS_amg_jacobi_prolongation(SSS_MAT *A,SSS_MAT *T ,SSS_MAT *P); 

SSS_MAT SSS_amg_jacobi_prolongation_GPU(SSS_MAT *A,SSS_MAT *T ,SSS_MAT *P); 

SSS_MAT form_tentative_p(SSS_VEC *aggregates,SSS_VEC  *B,SSS_AMG_PARS * pars);

SSS_MAT tentative_p_GPU(SSS_IVEC *aggregates,SSS_VEC *B,SSS_AMG_PARS * pars);



#if defined (__cplusplus)
}
#endif

#endif